6. չˣҵϢ:
ProcessUserHuman:(ҡ)
CPlayerObject->SearchViewRange();
CPlayerObject->Operate();
UserInfoListбεÿUserInfoOperateев; pUserInfo->Operate()m_pxPlayerObject->Operate()áݷַϢRM_TURNͻ˷SM_TURNϢGameSrv㲥ߣ꣩ϢҷϢȼװħȣ
ңƶ
1. m_xVisibleObjectListб(ңˣ͵AddProcess
 (RM_TURNΧҷϢ)
ͼ
2m_xVisibleItemListAddProcess(this, RM_ITEMSHOWϢµͼ
3m_xVisibleEventListAddProcess(this, RM_SHOWEVENT
 
ProcessMonsteṛ߳()
GameSrvProcessMonsteṛ߳ͬCMonsterObject󣬲ҼxMonsterObjListбpMapCellInfo->m_xpObjectListбУȻٵCMonsterObject::SearchViewRange()߷ΧĿ꣬g_SearchTable꣬תΪӦĵͼԪ񣬱пƶm_xVisibleObjectListбOperateOperatem_DelayProcessQб˳RM_DOOPENHEALTHRM_STRUCKRM_MAGSTRUCK¼(ֵָħ)
ProcessMerchantṣ߳(--)
       1). g_pMerchantInfoṹ(nNumOfMurchantInfo)õصĵͼ˶òͬıţ꣬ͷͼڸõͼмˣg_xMerchantObjList嵥мˡ
2). g_xMerchantObjList, SearchViewRangeÿ˸߷ΧĿ
a). m_xVisibleObjectListÿpVisibleObject->nVisibleFlag = 0;״̬ɾ
b). VisibleObjectListб(ʱInitializingServer searchTable.tbl)꣬ҵӦĵͼԪȻpMapCellInfo->m_xpObjectListбжΪOS_MOVINGOBJECT־UpdateVisibleObjectú m_xVisibleObjectListбҵ˶pVisibleObject->nVisibleFlag = 1;жpNewVisibleObjectnVisibleFlagΪ2öΪʵ壬Ȼm_xVisibleObjectListбС
 
ܽ᣺ѭбҳͼԪең(OS_MOVINGOBJECT)뵽m_xVisibleObjectListбС
c). m_xVisibleObjectListб,(pVisibleObject->nVisibleFlag == 0)ɾpVisibleObject
d). RunRaceAddRefMsg ΧҷSM_TURNSM_HIT
 
ͻյϢӦĴ
1CGameProcess::OnSocketMessageRecievem_xWaitPacketQueue
      m_xVisibleObjectListƶ(ɫ)
        RM_DISAPPEAR   ʧ(SM_DISAPPEAR)  ProcessDefaultPacket
        RM_DEATH       (SM_NOWDEATH, SM_DEATH)
           CHero::OnDeath ҡ
           CActor::OnDeath 
//g_xGameProc.m_xMagicList
        RM_TURN        ƶ
SM_TURNϢ
      m_xVisibleItemListƶ(ͼ)
        RM_ITEMHIDE    m_stMapItemListбɾƶ
 RM_ITEMSHOW    m_stMapItemListڣ򴴽һGROUNDITEMṹm_stMapItemListбС
typedef struct tagGROUNDITEM
{
                     INT             nRecog;
                     SHORT           shTileX;
                     SHORT           shTileY;
                     WORD            wLooks;
                     CHAR            szItemName[40];
}GROUNDITEM, *LPGROUNDITEM;
      m_xVisibleEventListƶ(¼)
        RM_HIDEEVENT   
RM_SHOWEVENT   
 
 
2. δm_xWaitPacketQueueProcessPacket
CClientSocket::OnSocketMessageFD_READ¼УPacketQ.PushQѽյϢѹPacketQСPacketQCGameProcess::Load()ʱOnTimerCGameProcess::OnTimerдģΪ 
OnTimer -> ProcessPacket -> ProcessPacketm_xWaitPacketQueueϢOnSocketMessageRecieveδϢ
 
ProcessPacket ̣
1 ңSM_NOWDEATH, SM_DEATH, SM_CHANGEMAP, SM_STRUCK
a.յϢSM_NOWDEATHSM_DEATH m_xPriorPacketQueueС
b. յϢSM_CHANGEMAPLoadMapChanged,ó
c. SM_STRUCK ܹңңNPCȣ
 
2 Ϣm_xMyHero.StruckMsgReassign();
                 m_xMyHero.m_xPacketQueue.PushQ((BYTE*)lpPacketMsg);
жϷϢIDǷͬm_xMyHero.m_dwIdentityڵ¼ɹʱ
ɷ͵ûϢȡġ
if ( lpPacketMsg->stDefMsg.nRecog == m_xMyHero.m_dwIdentity )
ǷϷԼ͵ϢԼϢ()͵Ϣm_xActorListб, жϸöǷڣòڣstFeature.bGender
_GENDER_MAN һCHero󣬼뵽m_xActorListбС
_GENDER_WOMAN
_GENDER_NPC һCNPC󣬼뵽m_xActorListбС
_GENDER_MON һCActor󣬼뵽m_xActorListбС
ȻpxActor->m_xPacketQueue.PushQ ȻϢѹöxPacketQueueбС
 
    ܽ᣺ProcessPacket CClientSocketܵϢ(m_xWaitPacketQueue)жǷǷ͸ԼϢһЩ͸ԼҪϢϢm_xMyHero.m_xPacketQueueУȻٱm_xActorListУж˷Ϣ(NPC)m_xActorListҲжһm_xActorListбУҰѸϢѹpxActor->m_xPacketQueueNPCȥ¼
xPacketQueueеϢֱɸöUpdatePacketState£
BOOL CActor::UpdatePacketState() ,BOOL CNPC::UpdatePacketState()
 BOOL CHero::UpdatePacketState()
 
ProcessDefaultPacket
    CGameProcess::OnSocketMessageRecieve  SM_CLEAROBJECTϢ
SM_DISAPPEARSM_CLEAROBJECTϢ
   m_xWaitDefaultPacketQueueϢб
SM_DISAPPEARSM_CLEAROBJECT
          m_xActorListбpxActor->m_xPacketQueueϢ
m_xActorList.DeleteCurrentNodeEx();Ӷɾö
CHero* pxHero = (CHero*)pxActor; delete((CHero*)pxHero);ٸҡ
 
 
Ϸѭ CGameProcess::RenderScene(INT nLoopTime)
Ҫ£
   wMoveTime += nLoopTime; жwMoveTime>100ʱbIsMoveTimeΪ档
 
 1m_xMyHero.UpdateMotionState(nLoopTime, bIsMoveTime);Ϣ
     a. UpdatePacketState
           m_xPriorPacketQueueУSM_NOWDEATHSM_DEATHϢȴ
           m_xPacketQueueϢ
             SM_STRUCK:
             SM_RUSH
             SM_BACKSTEP
             SM_FEATURECHANGED:
             SM_OPENHEALTH:         
SM_CLOSEHEALTH:        
SM_CHANGELIGHT:        
SM_USERNAME:           
SM_CHANGENAMECOLOR:
             SM_CHARSTATUSCHANGE:   
SM_MAGICFIRE:          
SM_HEALTHSPELLCHANGED: 
 
 2CheckMappedDatam_xActorListбֱ
         CActor::UpdateMotionState(INT nLoopTime, BOOL bIsMoveTime)
CNPC::UpdateMotionState(INT nLoopTime, BOOL bIsMoveTime)
CMyHero::UpdateMotionState(INT nLoopTime, BOOL bIsMoveTime)
     ԼϢ
 
CHero::UpdatePacketState()
case SM_SITDOWN:
         case SM_BUTCH:     
         case SM_FEATURECHANGED:    
         case SM_CHARSTATUSCHANGE: 
         case SM_OPENHEALTH:            
         case SM_CLOSEHEALTH:       
         case SM_CHANGELIGHT:       
         case SM_USERNAME:          
         case SM_CHANGENAMECOLOR:   
         case SM_HEALTHSPELLCHANGED:
         case SM_RUSH:              
         case SM_BACKSTEP:          
         case SM_NOWDEATH:
         case SM_DEATH:             
         case SM_WALK:              
         case SM_RUN:               
         case SM_TURN:              
         case SM_STRUCK:            
         case SM_HIT:
         case SM_FIREHIT:
         case SM_LONGHIT:
         case SM_POWERHIT:
         case SM_WIDEHIT:           
         case SM_MAGICFIRE:     
     case SM_SPELL:     
                            
 CNPC::UpdatePacketState()
     case SM_OPENHEALTH:            
      case SM_CLOSEHEALTH:   
      case SM_CHANGELIGHT:       
      case SM_USERNAME:          
      case SM_CHANGENAMECOLOR:   
      case SM_HEALTHSPELLCHANGED:    
      case SM_TURN:              
      case SM_HIT:
 
    CActor::UpdatePacketState()
         case SM_DEATH:     SetMotionFrame(_MT_MON_DIE, bDir);
         case SM_WALK:      SetMotionFrame(_MT_MON_WALK, bDir);
case SM_TURN:      SetMotionFrame(_MT_MON_STAND, bDir);
case SM_DIGUP:     SetMotionFrame(_MT_MON_APPEAR, bDir);
case SM_DIGDOWN:   SetMotionFrame(_MT_MON_APPEAR, bDir);
         case SM_FEATURECHANGED:        
        case SM_OPENHEALTH:            
         case SM_CLOSEHEALTH:       
         case SM_CHANGELIGHT:       
         case SM_CHANGENAMECOLOR:   
         case SM_USERNAME:          
         case SM_HEALTHSPELLCHANGED:    
         case SM_BACKSTEP:      SetMotionFrame(_MT_MON_WALK, bDir);
         case SM_STRUCK:            SetMotionFrame(_MT_MON_HITTED, m_bCurrDir);
         case SM_HIT:           SetMotionFrame(_MT_MON_ATTACK_A, bDir);
         case SM_FLYAXE:                
         case SM_LIGHTING:          
         case SM_SKELETON:
 
     յNPCҷ͵SM_TURNϢô
CHero::OnTurn
CNPC::OnTurn
CActor::OnTurn
 
ݷ͵Ϣ(һNPCڿͻ)ݲʼö(֣꣬ȼ)ںĴлƸöUI(ƶUI洦)
        
        SetMotionFrame(_MT_MON_STAND, bDir); m_bCurrMtn := _MT_MON_STAND
        m_dwFstFrame , m_dwEndFrame , m_wDelay һ֡һ֡ӳʱ䡣
 
   3.  AutoTargeting ԶĿ(NPC,ҵ)
   
   4 RenderObjectʱ
  
   5.  RenderMapTileGrid
       m_xMagicListħUIĴ
 
6.       m_xSnow, m_xRain, m_xFlyingTail, m_xSmoke, m_xLightFogóUI洦
 
  7. m_xMyHero.ShowMessage(nLoopTime); ʾû(UI)
 m_xMyHero.DrawHPBar(); ʾûHPֵ
  m_xActorListNPCUIػ
   pxHero->ShowMessage(nLoopTime);
 pxHero->DrawHPBar();
 
 8. DropItemShowʾ
 
9. жm_pxMouseTargetActor(Ҳ鿴ңNPCʱ)
   g_xClientSocket.SendQueryNameύѯϢ
m_pxMouseOldTargetActor = m_pxMouseTargetActor; ö
     m_pxMouseTargetActor->DrawName(); ػ(UIʾ)
 
 
һû¼̣֮
ǰķпԿûҵ¼ɹ֮󣬵õ˷ĸϢҲȽϸӣͬʱһȼҸû¼XY꣬û˷XYΪĸԪе(NPC,)SM_TURNϢ
ͻ˸ݰı־ЩNPCԣҰǼm_xActorListСUIϻЩ
 
